﻿/**
* jQuery EasyUI 1.4
* Copyright (c) 2010-2014 www.jeasyui.com. All rights reserved.
*
* Licensed under the GPL or commercial licenses
* To use it on other terms please contact author: info@jeasyui.com
* http://www.gnu.org/licenses/gpl.txt
* http://www.jeasyui.com/license_commercial.php
*
* jQuery EasyUI messager Extensions 1.0 beta
* jQuery EasyUI messager 组件扩展
* jeasyui.extensions.messager.js
* 二次开发 流云
* 最近更新：2014-08-24
*
* 依赖项：jquery.jdirk.js v1.0 beta late
*
* Copyright (c) 2013-2014 ChenJianwei personal All rights reserved.
* http://www.chenjianwei.org
*/
(function ($, undefined) {

    $.util.namespace("$.easyui");


    $.easyui.messager = $.util.isUtilTop ? $.messager : ($.util.$ && $.util.$.messager ? $.util.$.messager : $.messager);

    var defaults = {
        title: "操作提醒",
        ok: "确定",
        cancel: "取消"
    };

    if ($.messager.defaults) {
        $.extend($.messager.defaults, defaults);
    } else {
        $.messager.defaults = defaults;
    }

    $.messager.icons = { "error": "messager-error", "info": "messager-info", "question": "messager-question", "warning": "messager-warning" };
    $.messager.original = { show: $.messager.show, alert: $.messager.alert, confirm: $.messager.confirm, prompt: $.messager.prompt, progress: $.messager.progress };


    // 重写 $.messager.show 方法，使其支持图标以及默认的单个字符串参数的重载；该方法提供如下重载：
    //      function (msg)
    //      function (title, msg)
    //      function (title, msg, icon)
    //      function (title, msg, icon, position)
    //      function (options)，options 的格式如 { title, msg, icon, position }
    // 上述重载的命名参数中：
    //      msg     :
    //      title   :
    //      icon    :
    //      options :
    // 返回值：该方法返回一个表示弹出消息框的 easyui-window 对象，这是一个 jQuery 链式对象。
    $.messager.show = function (options) {
        var type = typeof arguments[0];
        if (type != "object" && type != "function") {
            return arguments.length == 1
                ? $.messager.show({ msg: arguments[0] })
                : $.messager.show({ title: arguments[0], msg: arguments[1], icon: arguments[2], position: arguments[3] });
        }
        var opts = $.extend({}, $.messager.defaults, $.messager.show.defaults, arguments[0] || {}),
            position = {
                topLeft: { showType: "show", right: "", left: 0, top: document.body.scrollTop + document.documentElement.scrollTop, bottom: "" },
                topCenter: { showType: "slide", right: "", top: document.body.scrollTop + document.documentElement.scrollTop, bottom: "" },
                topRight: { showType: "show", left: "", right: 0, top: document.body.scrollTop + document.documentElement.scrollTop, bottom: "" },
                centerLeft: { showType: "fade", left: 0, right: "", bottom: "" },
                center: { showType: "fade", right: "", bottom: "" },
                centerRight: { showType: "fade", left: "", right: 0, bottom: "" },
                bottomLeft: { showType: "show", left: 0, right: "", top: "", bottom: -document.body.scrollTop - document.documentElement.scrollTop },
                bottomCenter: { showType: "slide", right: "", top: "", bottom: -document.body.scrollTop - document.documentElement.scrollTop },
                bottomRight: { showType: "show", left: "", right: 0, top: "", bottom: -document.body.scrollTop - document.documentElement.scrollTop }
            };
        if (!position[opts.position]) {
            opts.position = $.messager.defaults.position;
        }
        opts.style = position[opts.position];
        if (opts.style.showType && !opts.showType) {
            opts.showType = opts.style.showType;
        }
        if (!$.messager.icons[opts.icon]) {
            opts.icon = $.messager.defaults.icon;
        }
        var icon = $.messager.icons[opts.icon];
        opts.msg = "<div class='messager-icon " + icon + "'></div>" + "<div>" + String(opts.msg) + "</div>";
        return $.messager.original.show(opts);
    };
    $.union($.messager.show, $.messager.original.show);

    $.messager.show.defaults = {
        icon: "info",
        //showType: "slide",
        position: "topCenter"
    };


    // 重写 $.messager.alert 方法，使其支持如下的多种重载方式：
    //      function (msg)
    //      function (msg, fn)
    //      function (title, msg)
    //      function (title, msg, icon)
    //      function (title, msg, fn)
    //      function (title, msg, icon, fn)
    //      function (options)，options 的格式如 { title, msg, icon, fn }
    // 上述重载的命名参数中：
    //      title   :
    //      msg     :
    //      icon    :
    //      fn      :
    //      options :
    // 返回值：该方法返回一个表示弹出消息框的 easyui-window 对象，这是一个 jQuery 链式对象。
    $.messager.alert = function (title, msg, icon, fn) {
        var type = typeof arguments[0];
        if (type != "object" && type != "function") {
            if (arguments.length == 1) {
                return $.messager.alert({ msg: arguments[0] });
            }
            if (arguments.length == 2) {
                var options = $.isFunction(arguments[1])
                    ? { msg: arguments[0], fn: arguments[1] }
                    : { title: arguments[0], msg: arguments[1] };
                return $.messager.alert(options);
            }
            if (arguments.length == 3) {
                var options = $.isFunction(arguments[2])
                    ? { title: arguments[0], msg: arguments[1], fn: arguments[2] }
                    : { title: arguments[0], msg: arguments[1], icon: arguments[2] };
                return $.messager.alert(options);
            }
            if (arguments.length > 3) {
                return $.messager.alert({ title: arguments[0], msg: arguments[1], icon: arguments[2], fn: arguments[3] });
            }
        }
        var opts = $.extend({}, $.messager.defaults, arguments[0] || {});
        return opts.fn
            ? $.messager.original.alert(opts.title, opts.msg, opts.icon, opts.fn)
            : $.messager.original.alert(opts.title, opts.msg, opts.icon);
    };
    $.union($.messager.alert, $.messager.original.alert);


    // 重写 $.messager.confirm 方法，使其支持如下的多种重载方式：
    //      function (msg)
    //      function (msg, fn)
    //      function (title, msg)
    //      function (title, msg, fn)
    //      function (options)，options 的格式如 { title, msg, fn }
    // 上述重载的命名参数中：
    //      title   :
    //      msg     :
    //      fn      :
    //      options :
    // 返回值：该方法返回一个表示弹出消息框的 easyui-window 对象，这是一个 jQuery 链式对象。
    $.messager.confirm = function (title, msg, fn) {
        var type = typeof arguments[0];
        if (type != "object" && type != "function") {
            if (arguments.length == 1) {
                return $.messager.confirm({ msg: arguments[0] });
            }
            if (arguments.length == 2) {
                var options = $.isFunction(arguments[1])
                    ? { msg: arguments[0], fn: arguments[1] }
                    : { title: arguments[0], msg: arguments[1] };
                return $.messager.confirm(options);
            }
            if (arguments.length > 2) {
                return $.messager.confirm({ title: arguments[0], msg: arguments[1], fn: arguments[2] });
            }
        }
        var opts = $.extend({}, $.messager.defaults, $.messager.confirm.defaults, arguments[0] || {});
        return opts.fn
            ? $.messager.original.confirm(opts.title, opts.msg, opts.fn)
            : $.messager.original.confirm(opts.title, opts.msg);
    };
    $.union($.messager.confirm, $.messager.original.confirm);

    $.messager.confirm.defaults = {
        msg: "您确认要进行该操作？"
    };


    // 重写 $.messager.prompt 方法，使其支持如下的多种重载方式：
    //      function (msg)
    //      function (msg, fn)
    //      function (title, msg)
    //      function (title, msg, fn)
    //      function (options)，options 的格式如 { title, msg, fn }
    // 上述重载的命名参数中：
    //      title   :
    //      msg     :
    //      fn      :
    //      options :
    // 返回值：该方法返回一个表示弹出消息框的 easyui-window 对象，这是一个 jQuery 链式对象。
    $.messager.prompt = function (title, msg, fn) {
        var type = typeof arguments[0];
        if (type != "object" && type != "function") {
            if (arguments.length == 1) {
                return $.messager.prompt({ msg: arguments[0] });
            }
            if (arguments.length == 2) {
                var options = $.isFunction(arguments[1])
                    ? { msg: arguments[0], fn: arguments[1] }
                    : { title: arguments[0], msg: arguments[1] };
                return $.messager.prompt(options);
            }
            if (arguments.length > 2) {
                return $.messager.prompt({ title: arguments[0], msg: arguments[1], fn: arguments[2] });
            }
        }
        var opts = $.extend({}, $.messager.defaults, $.messager.prompt.defaults, arguments[0] || {});
        return opts.fn
            ? $.messager.original.prompt(opts.title, opts.msg, opts.fn)
            : $.messager.original.prompt(opts.title, opts.msg);
    };
    $.union($.messager.prompt, $.messager.original.prompt);

    $.messager.prompt.defaults = {
        msg: "请输入相应内容："
    };


    // 重写 $.messager.progress 方法，使其支持如下的多种重载方式：
    //      function (msg)
    //      function (msg, interval)
    //      function (title, msg)
    //      function (title, msg, text)
    //      function (title, msg, interval)
    //      function (title, msg, text, interval)
    //      function (options)，options 的格式如 { title, msg, text, interval, method }，如果 options 定义了 method 属性，则直接相当于 function (method)
    //      function (method)，method 的值限定为 "bar" 或 "close"
    // 上述重载的命名参数中：
    //      msg     :
    //      title   :
    //      text    :
    //      interval:
    // 返回值：该方法返回一个表示弹出消息框的 easyui-window 对象，这是一个 jQuery 链式对象。
    $.messager.progress = function (options) {
        var type = typeof arguments[0];
        if (type != "object" && type != "function") {
            if (arguments.length == 1) {
                var msg = arguments[0], tmp = String(msg).toLowerCase(), str = $.trim(tmp);
                return (str == "bar" || str == "close")
                    ? $.messager.progress({ method: str })
                    : $.messager.progress({ msg: msg });
            }
            if (arguments.length == 2) {
                var options = $.isNumeric(arguments[1])
                    ? { msg: arguments[0], interval: arguments[1] }
                    : { title: arguments[0], msg: arguments[1] };
                return $.messager.progress(options);
            }
            if (arguments.length == 3) {
                var options = $.isNumeric(arguments[2])
                    ? { title: arguments[0], msg: arguments[1], interval: arguments[2] }
                    : { title: arguments[0], msg: arguments[1], text: arguments[2] };
                return $.messager.progress(options);
            }
            if (arguments.length > 3) {
                return $.messager.progress({ title: arguments[0], msg: arguments[1], text: arguments[2], interval: arguments[3] });
            }
        }
        var opts = $.extend({}, $.messager.defaults, $.messager.progress.defaults, arguments[0] || {});
        return opts.method
            ? $.messager.original.progress(opts.method)
            : $.messager.original.progress(opts);
    };
    $.union($.messager.progress, $.messager.original.progress);

    $.messager.progress.defaults = {
        msg: "正在处理，请稍等...",
        text: "正在处理，请稍等...",
        interval: 300
    };


    // 增加 $.messager.solicit 方法，该方法弹出一个包含三个按钮("是"、"否" 和 "取消")的对话框，点击任意按钮或者关闭对话框时，执行指定的回调函数；
    // 该方法提供如下方式重载：
    //      function (msg)
    //      function (msg, fn)
    //      function (title, msg)
    //      function (title, msg, fn)
    //      function (options)，options 的格式如 { title, msg, yes, no, cancel, fn }
    // 上述重载的命名参数中：
    //      title   :
    //      msg     :
    //      fn      :
    //      options :
    // 返回值：该方法返回一个表示弹出消息框的 easyui-window 对象，这是一个 jQuery 链式对象。
    $.messager.solicit = function (title, msg, fn) {
        var type = typeof arguments[0];
        if (type != "object" && type != "function") {
            if (arguments.length == 1) {
                return $.messager.solicit({ msg: arguments[0] });
            }
            if (arguments.length == 2) {
                var options = $.isFunction(arguments[1])
                    ? { msg: arguments[0], fn: arguments[1] }
                    : { title: arguments[0], msg: arguments[1] };
                return $.messager.solicit(options);
            }
            if (arguments.length > 2) {
                return $.messager.solicit({ title: arguments[0], msg: arguments[1], fn: arguments[2] });
            }
        }
        var opts = $.extend({}, $.messager.defaults, $.messager.solicit.defaults, arguments[0] || {}),
            win = $.messager.confirm(opts.title, opts.msg, opts.fn),
            winopts = win.window("options"),
            onClose = winopts.onClose,
            buttons = win.find(".messager-button").empty();
        winopts.onClose = function () {
            if ($.isFunction(onClose)) { onClose.apply(this, arguments); }
            if ($.isFunction(opts.fn)) { opts.fn.apply(this, arguments); }
        };
        $("<a class=\"messager-solicit messager-solicit-yes\"></a>").appendTo(buttons).linkbutton({
            text: opts.yes,
            onClick: function () {
                winopts.onClose = onClose;
                win.window("close");
                if ($.isFunction(opts.fn)) { opts.fn.call(this, true); }
            }
        });
        $("<a class=\"messager-solicit messager-solicit-no\"></a>").appendTo(buttons).linkbutton({
            text: opts.no,
            onClick: function () {
                winopts.onClose = onClose;
                win.window("close");
                if ($.isFunction(opts.fn)) { opts.fn.call(this, false); }
            }
        });
        $("<a class=\"messager-solicit messager-solicit-cancel\"></a>").appendTo(buttons).linkbutton({
            text: opts.cancel,
            onClick: function () {
                winopts.onClose = onClose;
                win.window("close");
                if ($.isFunction(opts.fn)) { opts.fn.call(this, undefined); }
            }
        });
        return win;
    };

    $.messager.solicit.defaults = {
        msg: "您确定要进行该操作？",
        yes: "是",
        no: "否",
        cancel: "取消"
    };




})(jQuery);